package com.net.mindview.util;

import java.util.Iterator;
import java.util.Random;

public class CoffeeGenerator implements Generator<Coffee>, Iterable<Coffee> {
    private Class[] types={Latte.class,Mocha.class,Cappuccino.class,Americano.class,Breve.class};
    private static Random rand=new Random(47);
    public CoffeeGenerator(){}
    private int size=0;
    public CoffeeGenerator(int sz){
    	this.size=sz;
    }
    public Coffee next(){
    	try {
			return (Coffee) types[rand.nextInt(types.length)].newInstance();
		} catch (Exception e) {
			// TODO: handle exception
			throw new RuntimeException();
		}
    }
	@Override
	public Iterator<Coffee> iterator() {
		// TODO Auto-generated method stub
		return new CoffeeIterator();
	}
    class CoffeeIterator implements Iterator<Coffee>{
        int count=size;
		@Override
		public boolean hasNext() {
			// TODO Auto-generated method stub
			return count>0;
		}

		@Override
		public Coffee next() {
			// TODO Auto-generated method stub
			count--;
			return CoffeeGenerator.this.next();
		}

		@Override
		public void remove() {
			// TODO Auto-generated method stub
			throw new UnsupportedOperationException();
		}
    }
    public static void main(String[] args) {
		CoffeeGenerator gen=new CoffeeGenerator();
		for(int i=0;i<5;i++){
			System.out.println(gen.next());
		}
		for(Coffee c:new CoffeeGenerator(5)){
			System.out.println(c);
		}
	}
}
